package com.gg.hml.controller;


import com.gg.common.pojo.DFile;
import com.gg.common.pojo.DModuleDetails;
import com.gg.common.pojo.DesignModule;
import com.gg.hj.util.INumber;
import com.gg.hml.search.DmoduleDetailsSearch;
import com.gg.hml.search.ProductFileSearch;
import com.gg.hml.service.ProductService;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

@Controller
public class ProductFileController {



    @Resource
    private ProductService productService;

    @Resource
    private INumber iNumber;



    /**
     * 判断产品名称是否存在
     * @param productName
     * @return String
     */
    @RequestMapping("/JudgmentProductName.action")
    @ResponseBody
    public DFile judgmentProductName(String productName){

        System.out.println("执行查询方法");
        System.out.println("...................+"+productName);
        return productService.judgmentProductName(productName);
    }





    @RequestMapping("/AddProduct.action")
    @ResponseBody
    public void addProduct(@RequestBody DFile dfile) throws Exception {
        System.out.println("执行添加方法");
        System.out.println("...................+"+dfile);

        //查询一级分类编号
        String firstKindId = productService.queryFirstKindId(dfile.getFirstKindName());
        //查询二级分类编号
        String secondKindId =productService.querySecondKindName(dfile.getSecondKindName());
        //查询三级级分类编号
        String thirdKindId =productService.queryThirdKindName(dfile.getThirdKindName());

        //set I,II,III级分类编号
        dfile.setFirstKindId(firstKindId);
        dfile.setSecondKindId(secondKindId);
        dfile.setThirdKindId(thirdKindId);
        String number = iNumber.number("100");
        dfile.setProductId(number);

        //set 档案变更标志为未变更
        dfile.setChangeTag("D002-0");

        //set 价格变更标志为未变更
        dfile.setPriceChangeTag("J001-0");

        //set 产品删除标志为未删除
        dfile.setDeleteTag("C001-0");

        //set 物料组成标志为未设计
        dfile.setDesignModuleTag("W001-0");

        //set 工序组成标志为未设计
        dfile.setDesignProcedureTag("G001-0");

        //set 库存分配标志为未设计
        dfile.setDesignCellTag("K001-0");

        //设置审核标志为待审核
        dfile.setCheckTag("S001-0");

        //设置变更次数为0
        dfile.setFileChangeAmount(0);
        productService.addProduct(dfile);


    }


    /**
     * 查询所有待审核产品
     * @return List<DFile>
     */
    @RequestMapping("queryReviewInformation.action")
    @ResponseBody
    public ProductFileSearch<DFile> queryReviewInformation(ProductFileSearch<DFile> productFileSearch){

        return productService.queryReviewInformation(productFileSearch);
    }


    @RequestMapping("/UpdateProduct.action")
    @ResponseBody
    public void updateProduct(@RequestBody DFile dfile){
        System.out.println("执行保存产品方法");
        System.out.println("...................+"+dfile);

        //查询一级分类编号
        String firstKindId = productService.queryFirstKindId(dfile.getFirstKindName());
        //查询二级分类编号
        String secondKindId =productService.querySecondKindName(dfile.getSecondKindName());
        //查询三级级分类编号
        String thirdKindId =productService.queryThirdKindName(dfile.getThirdKindName());

        //set I,II,III级分类编号
        dfile.setFirstKindId(firstKindId);
        dfile.setSecondKindId(secondKindId);
        dfile.setThirdKindId(thirdKindId);


        //set 档案变更标志为未变更
        dfile.setChangeTag("D002-0");

        //set 价格变更标志为未变更
        dfile.setPriceChangeTag("J001-0");

        //set 产品删除标志为未删除
        dfile.setDeleteTag("C001-0");

        //set 物料组成标志为未设计
        dfile.setDesignModuleTag("W001-0");

        //set 工序组成标志为未设计
        dfile.setDesignProcedureTag("G001-0");

        //set 库存分配标志为未设计
        dfile.setDesignCellTag("K001-0");

        System.out.println(dfile);

        productService.updateProduct(dfile);


    }


    /**
     * 查询所有产品信息(已通过审核)
     * @return List<DFile>
     */
    @RequestMapping("/queryProfileEnquiries.action")
    @ResponseBody
    public ProductFileSearch<DFile> queryProfileEnquiries(ProductFileSearch<DFile> productFileSearch){

        return productService.queryProfileEnquiries(productFileSearch);
    }



    /**
     * 产品变更方法(修改产品，和设置变更状态)
     * @param dfile
     */
    @RequestMapping("/ChangeProduct.action")
    @ResponseBody
    public void ChangeProduct(@RequestBody DFile dfile){
        System.out.println("执行变更产品方法");
        System.out.println("...................+"+dfile);

        //查询一级分类编号
        String firstKindId = productService.queryFirstKindId(dfile.getFirstKindName());
        //查询二级分类编号
        String secondKindId =productService.querySecondKindName(dfile.getSecondKindName());
        //查询三级级分类编号
        String thirdKindId =productService.queryThirdKindName(dfile.getThirdKindName());

        //set I,II,III级分类编号
        dfile.setFirstKindId(firstKindId);
        dfile.setSecondKindId(secondKindId);
        dfile.setThirdKindId(thirdKindId);

        //设置审核标志为待审核
        dfile.setCheckTag("S001-0");

        //set 档案变更标志为已变更
        dfile.setChangeTag("D002-1");

        //set 价格变更标志为未变更
        dfile.setPriceChangeTag("J001-0");

        //set 产品删除标志为未删除
        dfile.setDeleteTag("C001-0");

        //set 物料组成标志为未设计
        dfile.setDesignModuleTag("W001-0");

        //set 工序组成标志为未设计
        dfile.setDesignProcedureTag("G001-0");

        //set 库存分配标志为未设计
        dfile.setDesignCellTag("K001-0");

        //set 产品档案累计变更次数＋1
        int fileChangeAmount = dfile.getFileChangeAmount();
        dfile.setFileChangeAmount(fileChangeAmount+1);

        System.out.println(dfile);

        productService.updateProduct(dfile);


    }


    /**
     * 修改产品的删除标志为已删除(逻辑删除)
     * @param dFile
     */
    @RequestMapping("/DeleteProduct.action")
    @ResponseBody
    public void DeleteProduct(@RequestBody DFile dFile){

        //每次变更产品变更次数加1
        int fileChangeAmount = dFile.getFileChangeAmount();
        dFile.setFileChangeAmount(fileChangeAmount+1);

        //逻辑删除
        dFile.setDeleteTag("C001-1");
        System.out.println("执行删除方法");
        System.out.println(dFile);

        productService.DeleteProduct(dFile);
    }

    /**
     * 查询所有已删除的产品信息(逻辑删除)
     * @return List<DFile>
     */
    @RequestMapping("/QueryDeletedProduct.action")
    @ResponseBody
    public ProductFileSearch<DFile> QueryDeletedProduct(ProductFileSearch<DFile> productFileSearch){

        return productService.QueryDeletedProduct(productFileSearch);
    }


    /**
     * 恢复已逻辑删除的商品
     * @param dFile
     */
    @RequestMapping("/RecoveryProduct.action")
    @ResponseBody
    public void RecoveryProduct(@RequestBody DFile dFile){

        //每次变更产品变更次数加1
        int fileChangeAmount = dFile.getFileChangeAmount();
        dFile.setFileChangeAmount(fileChangeAmount+1);

        //逻辑删除
        dFile.setDeleteTag("C001-0");

        //设置产品审核标志为未审核
        dFile.setCheckTag("S001-0");
        System.out.println("执行恢复方法");
        System.out.println(dFile);

        productService.DeleteProduct(dFile);
    }


    /**
     * 根据id永久删除产品信息
     * @param id
     */
    @RequestMapping("/PermanentlyDeletedProduct.action")
    @ResponseBody
    public void PermanentlyDeletedProduct(int id){


        System.out.println("执行永久删除方法");
        System.out.println("...................."+id);

        productService.PermanentlyDeletedProduct(id);
    }


    /**
     * 查询到所有需定义物料组成的产品档案列表(用途类型为商品(Y001-1),审核标志为已通过(S001-1))
     * @return List<DFile>
     */
    @RequestMapping("/QueryMaterialsToBeDevelopedProduct.action")
    @ResponseBody
    public ProductFileSearch<DFile> QueryMaterialsToBeDevelopedProduct(ProductFileSearch<DFile> productFileSearch){

        return productService.QueryMaterialsToBeDevelopedProduct(productFileSearch);
    }


    @RequestMapping("/saveDesignModule.action")
    @ResponseBody
    public int saveDesignModule(@RequestBody DesignModule designModule) throws Exception {

        String number = iNumber.number("200");

        //查询一级分类编号
        String firstKindId = productService.queryFirstKindId(designModule.getFirstKindName());
        //查询二级分类编号
        String secondKindId =productService.querySecondKindName(designModule.getSecondKindName());
        //查询三级级分类编号
        String thirdKindId =productService.queryThirdKindName(designModule.getThirdKindName());

        //set 物料设计单编号
        designModule.setDesignId(number);

        //set I,II,III级分类编号
        designModule.setFirstKindId(firstKindId);
        designModule.setSecondKindId(secondKindId);
        designModule.setThirdKindId(thirdKindId);

        //将产品档案表的未设计改为已设计
        String productId = designModule.getProductId();
        productService.updateDsignModuleTag(productId);


        System.out.println(".............."+designModule);

        productService.saveDesignModule(designModule);

        //制定产品物料组成表后根据产品编号获取物料组成表的id
        return productService.queryPrimaryKeyByDesignModule(designModule.getProductId());



    }

    @RequestMapping("/saveDesignModuleDetails.action")
    @ResponseBody
    public void saveDesignModuleDetails(@RequestBody List<DModuleDetails> dModuleDetails){

        //循环物料组成明细集合的长度，根据次数将物料序号递增
        for(int i=0;i<dModuleDetails.size();i++){
            dModuleDetails.get(i).setDetailsNumber(i+1);
        }
        productService.saveDesignModuleDetails(dModuleDetails);
    }



    /**
     * 查询到所有需定义物料组成的产品档案列表(用途类型为商品(Y001-1),审核标志为已通过(S001-1))
     * @return List<DFile>
     */
    @RequestMapping("/QueryNotApprovedProducts.action")
    @ResponseBody
    public ProductFileSearch<DesignModule> QueryNotApprovedProducts(ProductFileSearch<DesignModule> designModuleProductFileSearch){

        return productService.QueryNotApprovedProducts(designModuleProductFileSearch);
    }


    /**
     * 查询
     * @return List<DFile>
     */
    @RequestMapping("/QueryDModuleDetails.action")
    @ResponseBody
    public List<DModuleDetails> QueryDModuleDetails(@RequestBody String parent_id){

        System.out.println(".............."+parent_id);

        return productService.QueryDModuleDetails(parent_id);
    }


    /**
     * 驳回产品物料组成
     * @param designModule
     */
    @RequestMapping("/PassDesignModule.action")
    @ResponseBody
    public void PassDesignModuleById(@RequestBody DesignModule designModule){

        System.out.println("要变更的产品信息为"+designModule);

        productService.PassDesignModuleById(designModule);

    }


    /**
     * 查询已通过审核的产品物料组成
     */
    @RequestMapping("/QueryPassModuleCount.action")
    @ResponseBody
    public int QueryPassModuleCount(){

        return productService.QueryPassModuleCount();

    }

    /**
     * 查询待审核的产品物料组成
     */
    @RequestMapping("/QueryWaitPassModuleCount.action")
    @ResponseBody
    public int QueryWaitPassModuleCount(){

        return productService.QueryWaitPassModuleCount();

    }
    /**
     * 查询审核不通过的产品物料组成
     */
    @RequestMapping("/QueryNoPassModuleCount.action")
    @ResponseBody
    public int QueryNoPassModuleCount(){

        return productService.QueryNoPassModuleCount();

    }


    /**
     * 根据物料序号删除原有的产品物料组成明细表
     */
    @RequestMapping("/deleteModuleByDetailsNumber.action")
    @ResponseBody
    public void deleteModuleByDetailsNumber(int id,String checkedIdJson,String falseCheckedIdList){

        if(falseCheckedIdList!=null && falseCheckedIdList!=""){
            int parentId=id;

            String[] falseStr=falseCheckedIdList.split(",");

            for(int i=0;i<falseStr.length;i++){

                if(checkedIdJson.indexOf(falseStr[i])>-1){
                    int detailsNumber=Integer.parseInt(falseStr[i]);
                    productService.deleteModuleByDetailsNumber(parentId,detailsNumber);
                }
            }
        }else {
            System.out.println("没有要删除的对象");

        }




    }

    /**
     * 根据物料序号修改或添加原有的产品物料组成明细表
     */
    @RequestMapping("/batchSaveDesignModuleDetails.action")
    @ResponseBody
    public void batchSaveDesignModuleDetails(@RequestBody List<DmoduleDetailsSearch> dmoduleDetailsSearches){

        System.out.println("添加或修改");
        System.out.println("集合为"+dmoduleDetailsSearches);

        if(dmoduleDetailsSearches.size()>0){

            System.out.println("aaaaaaaaaaaaaaa");


            DModuleDetails dModuleDetails=new DModuleDetails();

            DesignModule designModule=new DesignModule();

            String checkedId = dmoduleDetailsSearches.get(0).getCheckedId();




            //System.out.println("..............."+checkedId);
            //System.out.println(dmoduleDetailsSearches.size()==1);

            if(dmoduleDetailsSearches.size()==1){

               // System.out.println("dddddddd");

                if (checkedId.indexOf(dmoduleDetailsSearches.get(0).getDetailsNumber()) > -1) {
                   // System.out.println("修改");

                    dModuleDetails.setParentId(dmoduleDetailsSearches.get(0).getParentId());
                    dModuleDetails.setDetailsNumber(Integer.parseInt(dmoduleDetailsSearches.get(0).getDetailsNumber()));
                    dModuleDetails.setProductId(dmoduleDetailsSearches.get(0).getProductId());
                    dModuleDetails.setProductName(dmoduleDetailsSearches.get(0).getProductName());
                    dModuleDetails.setType(dmoduleDetailsSearches.get(0).getType());
                    dModuleDetails.setProductDescribe(dmoduleDetailsSearches.get(0).getProductDescribe());
                    dModuleDetails.setAmountUnit(dmoduleDetailsSearches.get(0).getAmountUnit());
                    dModuleDetails.setAmount(dmoduleDetailsSearches.get(0).getAmount());
                    dModuleDetails.setResidualAmount(dmoduleDetailsSearches.get(0).getResidualAmount());
                    dModuleDetails.setCostPrice(dmoduleDetailsSearches.get(0).getCostPrice());
                    dModuleDetails.setSubtotal(dmoduleDetailsSearches.get(0).getSubtotal());

                    System.out.println(dModuleDetails);

                    //批量修改物料组成明细
                    productService.BatchUpdateDMouleDetails(dModuleDetails);

                    //改完物料明细修改物料组成状态
                    designModule.setId(dModuleDetails.getParentId());
                    designModule.setChanger(dmoduleDetailsSearches.get(0).getChanger());
                    designModule.setChangeTime(dmoduleDetailsSearches.get(0).getChangeTime());
                    designModule.setModuleDescribe(dmoduleDetailsSearches.get(0).getModuleDescribe());

                    designModule.setCostPriceSum(dmoduleDetailsSearches.get(0).getCostPriceSum());
                    productService.BatchUpdateDModuleStatus(designModule);


                } else {
                    //System.out.println("添加");

                    dModuleDetails.setParentId(dmoduleDetailsSearches.get(0).getParentId());
                    dModuleDetails.setDetailsNumber(Integer.parseInt(dmoduleDetailsSearches.get(0).getDetailsNumber()));
                    dModuleDetails.setProductId(dmoduleDetailsSearches.get(0).getProductId());
                    dModuleDetails.setProductName(dmoduleDetailsSearches.get(0).getProductName());
                    dModuleDetails.setType(dmoduleDetailsSearches.get(0).getType());
                    dModuleDetails.setProductDescribe(dmoduleDetailsSearches.get(0).getProductDescribe());
                    dModuleDetails.setAmountUnit(dmoduleDetailsSearches.get(0).getAmountUnit());
                    dModuleDetails.setAmount(dmoduleDetailsSearches.get(0).getAmount());
                    dModuleDetails.setResidualAmount(dmoduleDetailsSearches.get(0).getResidualAmount());
                    dModuleDetails.setCostPrice(dmoduleDetailsSearches.get(0).getCostPrice());
                    dModuleDetails.setSubtotal(dmoduleDetailsSearches.get(0).getSubtotal());

                    //改完物料明细修改物料组成状态
                    designModule.setId(dModuleDetails.getParentId());
                    designModule.setChanger(dmoduleDetailsSearches.get(0).getChanger());
                    designModule.setChangeTime(dmoduleDetailsSearches.get(0).getChangeTime());
                    designModule.setCostPriceSum(dmoduleDetailsSearches.get(0).getCostPriceSum());
                    designModule.setModuleDescribe(dmoduleDetailsSearches.get(0).getModuleDescribe());
                    productService.BatchUpdateDModuleStatus(designModule);


                    System.out.println(dModuleDetails);

                    productService.BatchInsertDMouleDetails(dModuleDetails);

                }



            }else {




            for(int i=0;i<dmoduleDetailsSearches.size();i++) {

                if (checkedId.indexOf(dmoduleDetailsSearches.get(i).getDetailsNumber()) > -1) {
                    System.out.println("修改");

                    dModuleDetails.setParentId(dmoduleDetailsSearches.get(i).getParentId());
                    dModuleDetails.setDetailsNumber(Integer.parseInt(dmoduleDetailsSearches.get(i).getDetailsNumber()));
                    dModuleDetails.setProductId(dmoduleDetailsSearches.get(i).getProductId());
                    dModuleDetails.setProductName(dmoduleDetailsSearches.get(i).getProductName());
                    dModuleDetails.setType(dmoduleDetailsSearches.get(i).getType());
                    dModuleDetails.setProductDescribe(dmoduleDetailsSearches.get(i).getProductDescribe());
                    dModuleDetails.setAmountUnit(dmoduleDetailsSearches.get(i).getAmountUnit());
                    dModuleDetails.setAmount(dmoduleDetailsSearches.get(i).getAmount());
                    dModuleDetails.setResidualAmount(dmoduleDetailsSearches.get(i).getResidualAmount());
                    dModuleDetails.setCostPrice(dmoduleDetailsSearches.get(i).getCostPrice());
                    dModuleDetails.setSubtotal(dmoduleDetailsSearches.get(i).getSubtotal());

                    System.out.println(dModuleDetails);

                    //批量修改物料组成明细
                    productService.BatchUpdateDMouleDetails(dModuleDetails);

                    //改完物料明细修改物料组成状态
                    designModule.setId(dModuleDetails.getParentId());
                    designModule.setChanger(dmoduleDetailsSearches.get(i).getChanger());
                    designModule.setChangeTime(dmoduleDetailsSearches.get(i).getChangeTime());

                    designModule.setCostPriceSum(dmoduleDetailsSearches.get(i).getCostPriceSum());
                    designModule.setModuleDescribe(dmoduleDetailsSearches.get(0).getModuleDescribe());
                    productService.BatchUpdateDModuleStatus(designModule);


                } else {
                    System.out.println("添加");

                    dModuleDetails.setParentId(dmoduleDetailsSearches.get(i).getParentId());
                    dModuleDetails.setDetailsNumber(Integer.parseInt(dmoduleDetailsSearches.get(i).getDetailsNumber()));
                    dModuleDetails.setProductId(dmoduleDetailsSearches.get(i).getProductId());
                    dModuleDetails.setProductName(dmoduleDetailsSearches.get(i).getProductName());
                    dModuleDetails.setType(dmoduleDetailsSearches.get(i).getType());
                    dModuleDetails.setProductDescribe(dmoduleDetailsSearches.get(i).getProductDescribe());
                    dModuleDetails.setAmountUnit(dmoduleDetailsSearches.get(i).getAmountUnit());
                    dModuleDetails.setAmount(dmoduleDetailsSearches.get(i).getAmount());
                    dModuleDetails.setResidualAmount(dmoduleDetailsSearches.get(i).getResidualAmount());
                    dModuleDetails.setCostPrice(dmoduleDetailsSearches.get(i).getCostPrice());
                    dModuleDetails.setSubtotal(dmoduleDetailsSearches.get(i).getSubtotal());

                    //改完物料明细修改物料组成状态
                    designModule.setId(dModuleDetails.getParentId());
                    designModule.setChanger(dmoduleDetailsSearches.get(i).getChanger());
                    designModule.setChangeTime(dmoduleDetailsSearches.get(i).getChangeTime());
                    designModule.setCostPriceSum(dmoduleDetailsSearches.get(i).getCostPriceSum());
                    productService.BatchUpdateDModuleStatus(designModule);
                    designModule.setModuleDescribe(dmoduleDetailsSearches.get(0).getModuleDescribe());


                    System.out.println(dModuleDetails);

                    productService.BatchInsertDMouleDetails(dModuleDetails);

                }
            }

            }

        }else {
            System.out.println("没有要操作的数据");
        }



    }
}
